﻿<?php
//IPORTANT: ce fichier est le seul fichier à pouvoir manipuler la liste d'ordre de passage des joeur
/**
 * Ce fichier permet d'afficher chez les clients les questions et les reponses.
 * Pour le faire le script construire dans la session de chaque client(joueur)
 * une liste de joueur pour savoir à qui c'est le tour.la liste est de la forme
 * <code>
 *
 * </code>
 * Les joueurs donc ce n'est pas le tour reçoivent les question et les reponses
 * et le joueur donc c'est le tour reçoit uniquement la question. il recevra la
 * reponse à la question lorsqu'il aura repondu.
 * les informations renvoyé sont sur forme xml.
 * @package Quiz
 * @author NGAKO, LABIB
 * @version 1.3
 */
/**
 * On spécifie ici le type de données de retour
 */
header("Cache-Control: no-cache");
header("Content-type: text/xml");
print('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n");
require_once $_SERVER['roottrivialchase'].'/classes/Table.class.php';
require_once $_SERVER['roottrivialchase'].'/classes/EtatPartie.class.php';
require_once $_SERVER['roottrivialchase'].'/classes/Quiz.class.php';
session_start();
$message='<root><info>partie en cours</info></root>';
/**
 *
 * Cette méthode permet d'initialiser toutes les variables concernant le nouveau tour.
 * cette méthode doit être exécuté par le joueur donc c'est le tour.
 */
function nouveau_tour($nom_table){
	$_SESSION['tables'][$nom_table]['last_question']=$_SESSION['tables'][$nom_table]['question'];
	$_SESSION['tables'][$nom_table]['last_reponse']=$_SESSION['tables'][$nom_table]['reponse'];
	//si le joueur a donné une bonne reponse on passe a l'étape suivante et il continu a jouer donc on ne change pas de tour
	$tour=EtatPartie::get_Tour($nom_table);
	//on recupère la reponse du joueur en bd
	$reponse_user=EtatPartie::get_reponse($nom_table);
	//reponse exacte
	$reponse_exacte = $_SESSION['tables'][$nom_table]['reponse'];
	//on le compare a la bonne reponse
	$win=Quiz::verif_reponse($reponse_exacte,$reponse_user);
	if($win){//le joueur a donné une bonne reponse on ne change pas de tour
		$statut = EtatPartie::resetStatut2($nom_table);
	}
	else{//sinon on modifie en meme temps le tour et le statut
		
		$statut = EtatPartie::changerStatut_tour($nom_table);
	}

	$ntour=EtatPartie::get_Tour($nom_table);
	$problem='';
	$_SESSION['tables'][$nom_table]['tour']=$ntour;
	return $problem;
}
/**
 *
 * Cette méthode est appélée lorsqu'une partie est dans l'état 2
 * elle permet de poser une question à un joeur.
 */
function question($nom_table,$login){
	$que = $_SESSION['tables'][$nom_table]['que'];
	$tour=EtatPartie::get_Tour($nom_table);
	$_SESSION['tables'][$nom_table]['last_tour']=$tour;
	$nomJoueur = $_SESSION['tables'][$nom_table]['list'][$tour];
	$resultat = Quiz::get_question($nom_table);
	$question=$resultat['last_question'];
	$reponse=$resultat['last_reponse'];
	$_SESSION['tables'][$nom_table]['question']=$question;
	$_SESSION['tables'][$nom_table]['reponse']=$reponse;
	if($que == 0){//on a pas encore reçu la question
		//on recupère la question et la reponse
		$lastq = $_SESSION['tables'][$nom_table]['last_question'];
		$lastr = $_SESSION['tables'][$nom_table]['last_reponse'];
		if($nomJoueur == $login){
			//c'est le tour de celui qui fait la requète on affiche uniquement la solution
			$message="
				<root>
					<info>C'est votre tour lisez la question et cliquez sur repondre</info>
					<question>$question</question>
					<reponse>...</reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
		else{
			$message="
				<root>
					<info>c'est le tour de $nomJoueur</info>
					<question>$question</question>
					<reponse>$reponse</reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
		$_SESSION['tables'][$nom_table]['que']=1;
	}
	else{
		$lastq = $_SESSION['tables'][$nom_table]['last_question'];
		$lastr = $_SESSION['tables'][$nom_table]['last_reponse'];
		if($nomJoueur == $login){
			//c'est le tour de celui qui fait la requète
			$message="
				<root>
					<info>C'est votre tour lisez la question et cliquez sur repondre</info>
					<question>$question</question>
					<reponse>...</reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
		else{
			$message="
				<root>
					<info>c'est le tour de $nomJoueur</info>
					<question>$question</question>
					<reponse>$reponse</reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
	}
	$_SESSION['tables'][$nom_table]['rep']=0;
	return $message;
}
/**
 *
 * Cette fonction permet d'envoyer les bonnes réponses aux questions aux joueurs et de passer au tour suivant
 * en faisant appelle à la fonction nouveau_tour.
 */
function reponse($nom_table,$login){
	//on recupère la valeur rep de la partie pour savoir si on doit passer au tour suivant ou afficher les reponses
	$rep=$_SESSION['tables'][$nom_table]['rep'];
	$tour=EtatPartie::get_Tour($nom_table);
	$nomJoueur = $_SESSION['tables'][$nom_table]['list'][$tour];
	$lastq=$_SESSION['tables'][$nom_table]['question'];
	$lastr=$_SESSION['tables'][$nom_table]['reponse'];
	if($rep==0){//on a pas encore recu les reponses
		$reponse_user = EtatPartie::get_reponse($nom_table);
		$resultat = Quiz::get_question($nom_table);
		$question=$resultat['last_question'];
		$reponse=$resultat['last_reponse'];
		$_SESSION['tables'][$nom_table]['question']=$question;
		$_SESSION['tables'][$nom_table]['reponse']=$reponse;
		if($nomJoueur == $login){
			//c'est le tour de celui qui fait la requète
			////<myrep>votre reponse est :</myrep>
			$message="
				<root>
					<info>Partie en cours</info>
					<question> </question>
					<reponse> </reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
		else{
			//<myrep>votre reponse est :</myrep>
			$message="
				<root>
					<info>La reponse de $nomJoueur est : $reponse_user</info>
					<question>$question</question>
					<reponse>$reponse</reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
		$_SESSION['tables'][$nom_table]['rep']=1;
	}
	else{
		$lastq=$_SESSION['tables'][$nom_table]['question'];
		$lastr=$_SESSION['tables'][$nom_table]['reponse'];
		if($rep==1){
			$lastT = $_SESSION['tables'][$nom_table]['last_tour'];
			$last_login = $_SESSION['tables'][$nom_table][$lastT];
			if($nomJoueur == $login){
				$mes = nouveau_tour($nom_table);
				$message="
				<root>
					<info>Partie en cours</info>
					<question> </question>
					<reponse> </reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
			}
			else{
				$message="
				<root>
					<info>Partie en cours</info>
					<question> </question>
					<reponse> </reponse>
					<info>$last_login est entrain de se déplacer</info>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
			}
			$_SESSION['tables'][$nom_table]['rep']=12;//comme ça nous somme sûr de ne plus gérer la reponse sauf les déplacements
		}
		else{
			$message="
				<root>
					<info>Partie en cours</info>
					<question></question>
					<reponse></reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
		}
	}
	$_SESSION['tables'][$nom_table]['que'] = 0;
	return $message;
}
/**
 * Cette fonction renvoie un message au différent joueur indiquant que c'est le moment de ce déplacer.
 * Enter description here ...
 * @param $nom_table
 * @param $login
 */
function deplacement($nom_table,$login){
	$tour=EtatPartie::get_Tour($nom_table);
	if($tour == 0)$lastour = count($_SESSION['tables'][$nom_table]['list'])-1;
	else $lastour=$tour-1;
	$nomJoueur = $_SESSION['tables'][$nom_table]['list'][$tour];
	$nomlastJ = $_SESSION['tables'][$nom_table]['list'][$lastour];
	$lastq=$_SESSION['tables'][$nom_table]['question'];
	$lastr=$_SESSION['tables'][$nom_table]['reponse'];
	if($nomJoueur == $login){
		$message="
				<root>
					<info>$nomJoueur ce sera bientôt a vous de jouer</info>
					<question> </question>
					<reponse> </reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
			";
	}
	else{
			$message="
				<root>
					<info>Le tour suivant va bientôt commencer</info>
					<question> </question>
					<reponse> </reponse>
					<lastQ>$lastq</lastQ>
					<lastA>$lastr</lastA>
			   </root>
		";
	}
	return $message;
}
//on vérifit que le nom de la table a bien été envoyé en paramètre
if(isset($_GET['nom_table'])){
	//le nom de la table a été envoyé en paramètre
	$nom_table=$_GET['nom_table'];
	//on s'assure que le joueur a une session valide
	if(!isset($_SESSION['login'])){
		$message="<error><info>Vous n'etes pas connecté</info></error>";
	}
	else{
		$login=$_SESSION['login'];
		//on vérifie que la liste des tour a déjà été crée
		if(!isset($_SESSION['tables'][$nom_table])){
			//la liste des tour n'a pas encore été créer
			//on recupère l'état de la partie
			$result=EtatPartie::info_table($nom_table);
			//si la table n'existe pas en bd alors elle a été supprimer
			if($result == null){
				$message="
							<error>
								<info>La table $nom_table,$result, n'existe pas!!</info>
							</error>
						";
			}//le resultat n'est pas null
			else{
				if($result=='none'){
					$message="
							<error>
								<info>La partie sur La table $nom_table n'a pas encore commencé</info>
							</error>
						";
				}
				else{
					//on initialise toutes les variables dont on aura besoin
					$_SESSION['tables'][$nom_table]=$result;//liste des joueurs dans l'ordre
					$_SESSION['tables'][$nom_table]['que'] = 0;//alternateur pour la gestion de l'afficharge des questions
					$_SESSION['tables'][$nom_table]['rel'] = 0;//alternateur pour la gestion de l'afficharge des questions
					$_SESSION['tables'][$nom_table]['question'] = '';//dernière question posée
					$_SESSION['tables'][$nom_table]['reponse'] = '';//reponse a la dernière question
					$_SESSION['tables'][$nom_table]['last_question']='';
					$_SESSION['tables'][$nom_table]['last_reponse']='';
					$etat = EtatPartie::etat_table($nom_table);
					//kjghgfjghfgf
					if($etat> 1){//si la partie existe, a démarer et n'est pas en pause
						$statut=EtatPartie::get_statut($nom_table);
						switch ($statut){
							case 1://déplacement en cour
								//$message=deplacement($nom_table,$login);
								break;
							case 2://il faut pauser des questions
								$message=question($nom_table,$login);
								break;
							case 3:
								//le joueur donc c'était le tour a repondu, il faut afficher la bonne reponse a tout le monde
								//la reponse donnée par le joueur donc c'était le tour, de modifier la variable tour et de
								//passé la main pour le déplacement de la table
								$message=reponse($nom_table,$login);
								break;
							default:
								$message=deplacement($nom_table,$login);

						}
					}
					else{
						switch ($etat){
							case -1:
								$message="
										<root>
											<info>la partie n'existe plus! fermer le plateau</info>
										</root>
										";
								break;
							case 0 :
								$message="
										<root>
											<info>la partie n'a pas encore démarré</info>
										</root>
										";
								break;
							case 1 :
								$message="
										<root>
											<info>la partie est en pause</info>
										</root>
										";
								break;
							default://le statut est inconnu
								$message="
										<root>
											<info>Oups!!! une erreur est survenue</info>
										</root>
										";
						}
					}
				}
			}
		}//la liste des tours a déjà été créer
		else{
			$etat = EtatPartie::etat_table($nom_table);
			if($etat> 1){//si la partie existe, a démarer et n'est pas en pause
				$statut = EtatPartie::get_statut($nom_table);
				switch ($statut){
					case 1://déplacement en cour
						$message=deplacement($nom_table,$login);
						break;
					case 2://il faut pauser des questions
						$message=question($nom_table,$login);
						break;
					case 3:
						//le joueur donc c'était le tour a repondu, il faut afficher la bonne reponse a tout le monde
						//la reponse donnée par le joueur donc c'était le tour, de modifier la variable tour et de
						//passé la main pour le déplacement de la table
						$message=reponse($nom_table,$login);
						//on a afficher les reponses on passe au tour suivant qui va commencé par un déplacement
						break;
					default:
						$message=deplacement($nom_table,$login);
				}
			}
			else{
				switch ($etat){
					case -1:
						$message="
										<root>
											<info>la partie n'existe plus! fermer le plateau</info>
										</root>
										";
						break;
					case 0 :
						$message="
										<root>
											<info>la partie n'a pas encore démarré</info>
										</root>
										";
						break;
					case 1 :
						$message="
										<root>
											<info>la partie est en pause</info>
										</root>
										";
						break;
					default://le statut est inconnu
						$message="
										<root>
											<info>Oups!!! une erreur est survenue</info>
										</root>
										";
				}
			}
		}
	}
}
else{
	$message="
			<error>
				<info>Erreur de connexion</info>
			</error>
		";
}
echo $message;
?>